package com.cmpe451.nutty.dao;

import java.util.List;

import com.cmpe451.nutty.model.Comment;
import com.cmpe451.nutty.model.Favorite;
import com.cmpe451.nutty.model.Ingredients;
import com.cmpe451.nutty.model.Menu;
import com.cmpe451.nutty.model.Menu_Recipe;
import com.cmpe451.nutty.model.Rate;
import com.cmpe451.nutty.model.Recipe;
import com.cmpe451.nutty.model.Recipe_Derive;
import com.cmpe451.nutty.model.Style;
import com.cmpe451.nutty.model.Tools;
import com.cmpe451.nutty.model.Unit;
import com.cmpe451.nutty.so.GuiUser;

public interface RecipeDao extends BaseDao{

	public List<Recipe> findRecipeByUser(GuiUser user);

	public Recipe findRecipeById(Long id);

	public Ingredients findIngredientByName(String name);

	public Ingredients findIngredientById(long id);

	public Tools findToolByName(String name);

	public Tools findToolById(Long id);

	public List<Recipe> findLatestRecipes();

	public List<Comment> getLatestCommentsById(Long recipeId);

	public List<Recipe> findRecipeByQuery(String query);

	public List<Unit> findUnits();
	
	public List<Style> findStyles();

	public List<Recipe> findLatestRecipesByUsername(String username);

	public List<Recipe> findLatestRecipesInCircle(List<String> follows);

	public List<Tools> findTools();

	public Rate getRatebyRecipe(String username, Long recipeId);

	public List<Recipe> rateLatestRecipes(List<Recipe> recipes);

	public List<Rate> getTotalRate(Recipe recipe);

	public List<Recipe> getLikedRecipes(String str, int cooktime, String easiness);

	public List<Recipe> getDislikedRecipes(String str, int cooktime, String easiness);

	public List<Recipe> getRecipeBasedOnKeywords(String str);
	
	public Favorite findFav(Long userId, Long recipeId);

	public List<Favorite> findFavorite(Long userId);

	public List<Recipe> getLikedRecipes(String str);

	public List<Recipe> getDislikedRecipes(String str);

	public List<Menu> findMenusOfTheUser(long userid);

	public List<Menu_Recipe> findMenuRecipePairs(Long id);

	public List<Recipe> findRecipeByName(String name);

	public List<Recipe_Derive> getDerivedRecipesById(Long recipeId);

}
